As storage needs increase, solutions have to be found to drive the cost of storage down while maintaining ease of management. Prior solutions move complex storage management into dedicated storage systems. This saves application servers from embedding storage disks directly, and avoids potential inconveniences such as disk failure, data loss, data reconstruction, etc. This also enables economies of scale by managing a shared pool of storage resources more efficiently. Typical technologies include: SAN, Storage Area Networks where storage is centralized into large dedicated proprietary storage cabinets that export their storage capacity in the form of block device volumes, and NAS, Network Attached Storage where medium-sized storage devices export their disks as network file systems. Object stores that do not follow the centralized architecture design can be deployed on large clusters of generic servers, pushing fault tolerance on the software stack rather than onto dedicated storage hardware.
Because SAN technology is block-based, as opposed to file-based, and slices storage capacity into monolithic volumes, solutions derived from this technology cannot perform storage optimization based on the concept of files or objects. These solutions manipulate small, anonymous binary blobs called blocks with no metadata attached to them. Improvements such as thin provisioning, i.e., over-allocation of storage space for each volume to minimize the need for growing existing volumes have evolved. They, however, do not solve the problem at an architectural level and do not solve the underlying issues. For example, most file systems behave poorly with thin provisioning because the file systems assume that they have infinite space so, they do not reuse past blocks and waste space that cannot be reclaimed online, and they require scheduled maintenance down time.